题解 CF914A@洛谷 | 914A@Codeforces 【Perfect Squares】

根据题意,我们要求序列中的最大的非完全平方数。

求最大,有两种思路:

  1. sort从大到小
  2. max函数取最大

这里采用第二种思路。


头文件部分:

#include <iostream>
#include <limits.h>
#include <math.h>
using namespace std;

iostream,C++基础头文件。
limits.h,为了后面的INT_MIN
math.h,为了开方。

判断不是完全平方数

if(int(sqrt(a))*int(sqrt(a)) != a)

原理:int自动向下取整,平方根的平方就是数本身。

取最大

MAX = INT_MIN;
//中间代码
MAX = max(MAX, a);

INT_MIN是limits.h里面存储int的下界的常量,见:#define INT_MIN (-2147483647-1)

max函数是取前后的最大值的函数。

把以上部分整合,得到完整代码:

#include <iostream>
#include <limits.h>
#include <math.h>
using namespace std;

int main()
{
	int n;
	cin>>n;
	int a;
	int MAX = INT_MIN;
	for(int i=0;i<n;i++)
	{
		cin>>a;
		if(int(sqrt(a)) * int(sqrt(a)) != a)
			MAX = max(MAX, a);
	}
	cout<<MAX<<endl;
	return 0;
}